const event: { [key: string]: Function } = {};
/** 事件句柄 */
export default {
  /** 绑定一个事件 */
  $on(eventName: string, eventFun: Function) {
    if (event.hasOwnProperty(eventName)) {
      throw new Error(`存在事件 => ${eventName}`);
    } else {
      event[eventName] = eventFun;
    }
  },
  /** 解绑一个事件 */
  $off(eventName: keyof typeof event) {
    if (event.hasOwnProperty(eventName)) {
      delete event[eventName];
    } else {
      throw new Error(`不存在事件 => ${eventName}`);
    }
  },
  /** 触发一个事件 */
  $emit<T>(eventName: keyof typeof event, ...args: any): T {
    if (event.hasOwnProperty(eventName)) {
      return event[eventName](...args);
    } else {
      throw new Error(`不存在事件 => ${eventName}`);
    }
  }
};
